<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="div">div</div>
<script>
    // let getId = document.getElementById
    //
    // alert(getId('id')) // 抛出异常
    // /*
    //  Chrome、Firefox、IE10 中执行过后就会发现，这段代码抛出了一个异常。这是因为许多
    // 引擎的 document.getElementById 方法的内部实现中需要用到 this。这个 this 本来被期望指向
    // document，当 getElementById 方法作为 document 对象的属性被调用时，方法内部的 this 确实是指
    // 向 document 的。
    // 但当用 getId 来引用 document.getElementById 之后，再调用 getId，此时就成了普通函数调用，
    // 函数内部的 this 指向了 window，而不是原来的 document
    //  */

    // 修正：
    document.getElementById = (function (func) {
        return function () {
            // 借调
            return func.apply(document, arguments)
        }
    })(document.getElementById)
</script>
</body>
</html>
